package org.soderiakelvy.model.dao.imp;

import java.io.Serializable;
import java.util.List;



import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.soderiakelvy.model.dao.TipoClienteDao;
import org.soderiakelvy.model.domain.TipoClienteVO;
import org.soderiakelvy.model.util.HibernateUtil;

public class TipoClienteDaoImp implements TipoClienteDao, Serializable  {
	private static final long serialVersionUID = 1L;

	@Override
	public void insertTipoCliente(TipoClienteVO tipoCliente) throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        session.save(tipoCliente);
        session.getTransaction().commit();
        session.close();
		
	}

	@Override
	public void updateTipoCliente(TipoClienteVO tipoCliente) throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        session.update(tipoCliente);
        session.getTransaction().commit();
        session.close();
		
	}

	@Override
	public void deleteTipoCliente(TipoClienteVO tipoCliente) throws Exception {
		 SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
	        Session session = sessionFactory.openSession();
	        session.beginTransaction();
	        session.delete(tipoCliente);
	        session.getTransaction().commit();
	        session.close();
		
	}

	@Override
	public List<TipoClienteVO> getAllTiposDeClientes() throws Exception {
		System.out.println("loading tipos de clientes....");
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        Criteria criteria = session.createCriteria(TipoClienteVO.class);
        criteria.addOrder(Order.asc("nombre"));
        List<TipoClienteVO> clientes = criteria.list();
        session.close();
        return clientes;
	}

	@Override
	public TipoClienteVO getTipoClienteByNombre(String nombre) throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		Criteria criteria = session.createCriteria(TipoClienteVO.class);
		criteria.add(Restrictions.eq("nombre", nombre));
		TipoClienteVO fcVO =(TipoClienteVO) criteria.uniqueResult(); 
		session.close();
		return fcVO;
	}

	@Override
	public TipoClienteVO getTipoClienteById (long tipoClienteId)  {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        Criteria criteria = session.createCriteria(TipoClienteVO.class);
        criteria.add(Restrictions.eq("tipoClienteId", tipoClienteId));
        TipoClienteVO tipoClient = (TipoClienteVO)criteria.uniqueResult();
        session.close();
        return tipoClient;
	}

	@Override
	public TipoClienteVO getDefaultValue() throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        Criteria criteria = session.createCriteria(TipoClienteVO.class);
        criteria.add(Restrictions.eq("defaultValue", 1));
        TipoClienteVO tipoClient = (TipoClienteVO)criteria.uniqueResult();
        session.close();
		return tipoClient;
	}
	
}
